package mblog.base.utils;

import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.ToAnalysis;
import org.apache.commons.lang.StringUtils;

import java.util.*;

/**
 * 分词
 */
public class AnsjUtils {

    public static String analysis(String[] arts,String str) {
        //只关注这些词性的词
        List<String> natures = Arrays.asList(arts);
        Set<String> expectedNature = new HashSet<String>() {{}};
        for(String s : natures){
            expectedNature.add(s);
        }

        Result result = ToAnalysis.parse(str); //分词结果的一个封装，主要是一个List<Term>的terms
//        System.out.println(result.getTerms());

        List<Term> terms = result.getTerms(); //拿到terms
//        System.out.println(terms.size());
        HashMap<String,String> dataMap = new HashMap<>();
        StringBuffer sb = new StringBuffer();
        for(int i=0; i<terms.size(); i++) {
            String word = terms.get(i).getName(); //拿到词
            String natureStr = terms.get(i).getNatureStr(); //拿到词性
            if(!dataMap.containsKey(natureStr)){//相同词只保存一次
                if(expectedNature.contains(natureStr)) {
                    sb.append(word).append(",");
                }
            }
            dataMap.put(natureStr,natureStr);
        }
        if(StringUtils.isNotEmpty(sb.toString()) && sb.length()>1){
            return sb.deleteCharAt(sb.length() - 1).toString();
        }else{
            return "";
        }
    }

    public static void main(String[] args) {
        String[] strings = new String[]{"n"};//目前只取名词
//        add("n");
//        add("v");
//        add("vd");
//        add("vn");
//        add("vf");
//        add("vx");add("vi");add("vl");
//        add("vg");
//        add("nt");add("nz");add("nw");add("nl");
//        add("ng");add("userDefine");add("wh");

        System.out.println(analysis(strings,"java欢迎使用ansj_seg,(ansj中文分词)在这里问题如果你遇到什么问题都可以联系我.我一定尽我所能.帮助大家.ansj_seg更快,更准,更自由!"));
    }
}